Reproduzierbare Forschung
mit R und Quarto – Einleitung
Workshop für die GSE Wuppertal
June 27, 2025
| Uhrzeit | Programmpunkt |
|---|---|
| 10:00 – 10:15 | Begrüßung & Einführung |
| 10:15 – 11:15 | Einleitung |
| 11:15 – 11:20 | ☕ Kurze Pause |
| 11:20 – 12:30 | Praktischer Teil 1 |
| 12:30 – 13:15 | 🍽️ Mittagspause |
| 13:15 – 14:20 | Praktischer Teil 2 |
| 14:20 – 14:30 | ☕ Kurze Pause |
| 14:30 – 15:30 | Fortgeschrittene Themen |
| 15:30 – 16:00 | Zusammenfassung & Abschlussdiskussion |
Teile dieses Workshops beruhen teils verbatim oder sehr nah auf folgenden Ressourcen, welche ich mit einer CC-BY Lizenz verwende: - CRS Primer on dynamic reporting - Molo, Fraga González, and Pawel (2025) - Peikert and Diemerling (2025) - Teils recht opinionated
TODO Link zu Materialien nochmals.
Eine sehr einfache Definition:
Die gleiche Analyse der gleichen Daten führt zu den gleichen Ergebnissen
\(\rightarrow\) Computational reproducibility kann schwierig sein!
\(\rightarrow\) Reproducibility + Robustness + Replicability necessary for Generalizabilty!
Aber reproduzierbare Forschung ist schwierig und kann sich überwältigend anfühlen.
Kein Grund zur Verzweiflung! Mit jedem Schrit::
- Paper_final_wirklich_final.docx
- daten.xlsx code_alt.R
- code_neu_funktioniert.R
- plot1.png
projekt/
├── data/
│ ├── raw/
│ └── processed/
├── scripts/
├── output/
└── README.md
Praxis-Tipp
Erstellt eine Standard-Ordnerstruktur und kopiert diese für neue Projekte!
Daten.xlsxneue analyse.Rplot final FINAL.pngFragebogen - Kopie (2).docx2025-06-28_fragebogen-daten-roh.xlsx01_datenbereinigung.R02_deskriptive-statistik.Rabb01_altersverteilung.pngUnklarer Name, keine Dokumentation:
logmlis <- function(x){
lapply(x, function(x){
y <- unlist(x)
y <- y[!is.na(y)]
y <- y[y != ""]
return(mean(log(y)))
})
}Klarer Name, konzise Dokumentation:
Praxis-Tipp
Nach Peikert and Diemerling (2025):
Problem: Funktioniert nur auf Ihrem Computer!
Noch besser: Verwendung des here packages (funktioniert mit verschiedenen Systemen):
01_data_import.R - Rohdaten laden02_data_cleaning.R - Präprozessierung03_descriptive_analysis.R - Deskriptive Statistiken04_inferential_statistics.R - Inferenz05_visualization.R - Abbildungen06_export.R - ExportVorteile: Übersichtlicher, leichter zu debuggen, bessere Zusammenarbeit
# Standardization for variable 1
data$var1_std <- (data$var1 - mean(data$var1, na.rm = TRUE)) /
sd(data$var1, na.rm = TRUE)
# Standardization for variable 2
data$var2_std <- (data$var2 - mean(data$var2, na.rm = TRUE)) /
sd(data$var2, na.rm = TRUE)
# Standardization for variable 3...standardize_variable <- function(x) {
# Z-standardization of a numeric variable
(x - mean(x, na.rm = TRUE)) / sd(x, na.rm = TRUE)
}
# Application
data$var1_std <- standardize_variable(data$var1)
data$var2_std <- standardize_variable(data$var2)
data$var3_std <- standardize_variable(data$var3)
# Or even better
data <- data |>
mutate(across(starts_with("var"), standardize_variable))# What do these numbers mean?
clean_data <- data[data$age >= 18 & data$age <= 65, ]
final_data <- clean_data[clean_data$score > 2.5, ]
significant <- results[results$p_value < 0.05, ]# Clear definitions at the beginning of the script
MIN_AGE <- 18
MAX_AGE <- 65
MIN_SCORE <- 2.5
ALPHA_LEVEL <- 0.05
# Usage in code
clean_data <- data[data$age >= MIN_AGE &
data$age <= MAX_AGE, ]
final_data <- clean_data[clean_data$score > MIN_SCORE, ]
significant <- results[results$p_value < ALPHA_LEVEL, ]Vorteil: Code wird selbsterklärend und leichter anpassbar
unklarer Ausführungsreihenfolge
Zeitaufwendiges Copy-Pasten
Fehleranfälliges Copy-Pasten
Daten \(\rightarrow\) dynamischer Report \(\rightarrow\) Manuskript
TODO Quelle einfügen
| Datei | Code | Markup | Output Formate | |
|---|---|---|---|---|
| Sweave | .Rnw | R | LaTeX | pdf, tex |
| R Markdown | .Rmd | R | Markdown | pdf, html, tex, docx, pptx |
| Jupyter Notebook | .ipynb | Julia, Python, R | Markdown | pdf, html, tex, py, … |
| Quarto | .qmd | Julia, Python, R | Markdown | pdf, html, tex, docx, pptx, … |